package persistencia;

import org.dom4j.Attribute;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import dominio.comun.Posicion;
import dominio.comun.sentidosMovimiento.SentidoAbajo;
import dominio.comun.sentidosMovimiento.SentidoArriba;
import dominio.comun.sentidosMovimiento.SentidoDerecha;
import dominio.comun.sentidosMovimiento.SentidoIzquierda;
import dominio.comun.sentidosMovimiento.SentidoMovimiento;
import dominio.laberinto.ICasillero;
import dominio.laberinto.Laberinto;
import dominio.pacman.IPacmanRepository;
import dominio.pacman.Pacman;

public class XMLPacmanRepository implements IPacmanRepository {

	private Element elemRaiz;

	public void setElemRaiz(Element elemRaiz) {
		this.elemRaiz = elemRaiz;
	}
	
	@Override
	public void guardar(Pacman pacman) {
		ICasillero casillero = Laberinto.getInstance().searchCasillero(pacman.getPosicion());
		Attribute posicionPacman = DocumentHelper.createAttribute(this.elemRaiz, "posicionPacman", casillero.getId());
		
		Attribute fila = DocumentHelper.createAttribute(this.elemRaiz, "fila", String.valueOf(pacman.getPosicion().getPosX()));
		Attribute columna = DocumentHelper.createAttribute(this.elemRaiz, "columna", String.valueOf(pacman.getPosicion().getPosY()));
		
		String strSentido = null;
		if (pacman.getMiSentidoMovimiento().getClass().getCanonicalName().contains("izquierda")) {
			strSentido = "izquierda";
		}
		if (pacman.getMiSentidoMovimiento().getClass().getCanonicalName().contains("derecha")) {
			strSentido = "derecha";
		}
		if (pacman.getMiSentidoMovimiento().getClass().getCanonicalName().contains("arriba")) {
			strSentido = "arriba";
		}
		if (pacman.getMiSentidoMovimiento().getClass().getCanonicalName().contains("abajo")) {
			strSentido = "abajo";
		}
		Attribute sentido = DocumentHelper.createAttribute(this.elemRaiz, "sentido", strSentido);
		
		this.elemRaiz.add(posicionPacman);
		this.elemRaiz.add(fila);
		this.elemRaiz.add(columna);
		this.elemRaiz.add(sentido);
	}

	@Override
	public Pacman cargar() {
		Pacman pacman = Pacman.getInstance();
		
		int fila = Integer.parseInt(this.elemRaiz.attributeValue("fila"));
		int columna = Integer.parseInt(this.elemRaiz.attributeValue("columna"));
		Posicion posicion = new Posicion(fila, columna);

		String strSentidoMovimiento = this.elemRaiz.attributeValue("sentido");
		SentidoMovimiento sentidoMovimiento = null;
		if (strSentidoMovimiento.equals("izquierda")) {
			sentidoMovimiento = new SentidoIzquierda();
		}
		if (strSentidoMovimiento.equals("derecha")) {
			sentidoMovimiento = new SentidoDerecha();
		}
		if (strSentidoMovimiento.equals("arriba")) {
			sentidoMovimiento = new SentidoArriba();
		}
		if (strSentidoMovimiento.equals("abajo")) {
			sentidoMovimiento = new SentidoAbajo();
		}

		pacman.setPosicion(posicion);
		pacman.setSentidoMovimiento(sentidoMovimiento);
		
		return pacman;
	}

}
